接下來建立用戶資料庫,進入到github的【line-bot-sdk-python】
找到【get_profile】透過line bot api的get_profile方式將user_id導入,即可取得用戶的資料profile,資料內容即包含的用戶名稱(display_name)、用戶的Line user ID(user_id)、用戶頭像url(picture_url)、用戶的狀態消息(status_message)
會提交到pyCharm的程式碼:
回到pyCharm,在handle_message底下,添加剛剛的程式碼,讓機器人去取得用戶的資訊。
將event中的user_id給匯入:
event.source.user_id
舉的資料後儲存到profile中,然後將這些取得的資訊print出。
再來就是啟動sever測試看看。
開始run之後,可能會出現這個訊息,這是在說未來SQLAlchemy這項功能是預設關閉的,那想移除這樣的訊息,就明白定義是FALSE。
所以要加入設定程式碼,去定義為False:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
再來重啟SEVER測試看看,我對機器人互動一下,就會PRINT出我用戶的用戶名稱(display_name)、用戶的Line user ID(user_id)、用戶頭像url(picture_url)、用戶的狀態消息(status_message)
那已經確定能抓到用戶資訊,接續就是要把這些資訊儲存到前面建立的資料庫中。
所以就需要建立user物件,會需要LINE用戶的user_id、用戶的display_name、用戶的picture_url,所以程式碼:
user = User(profile.user_id, profile.display_name, profile.picture_url)
在來使用SQLALCHEMY(DB)得session.add加入session中,然後再使用commit儲存至資料庫,程式碼:
db.session.add(user)
db.session.commit()
編輯好後,就一樣重新啟動SEVER,再與linebot互動一下後,進入pgadmin的Table,點選User再選View Data。
打開後就能看到,剛剛儲存的用戶資料。
那為了的防止重複紀錄,就需要加上User.query去搜尋資料庫是否已經有這Line_ID,添加程式碼:
user = User.query.filter(User.line_id == event.source.user_id).first()
並加上判斷式(IF),如果USER不存在資料庫時,才會去索取USER的資料。
完成後再重新啟動SEVER,試試看。
結果也很明顯,我自己在多餘的互動,都不會被line紀錄。這樣就達成我的目的。
下一篇,增加 line bot 機器人功能